package cn.demoncat.util.word.poi_tl;

import com.deepoove.poi.policy.DynamicTableRenderPolicy;
import com.deepoove.poi.util.TableTools;
import org.apache.poi.xwpf.usermodel.XWPFTable;

/**
 * 合并列的 TableRenderPolicy
 *
 * @author 延晓磊
 * @since 2023年12月27日
 */
public class MergeColumnTableRenderPolicy extends DynamicTableRenderPolicy {

    // 起始行，从0开始
    private final int row;
    // 起始列，从0开始
    private final int col;
    // 合并的列数：正数 col + num, 负数 row.cells.size -1 + num，零 row.cells.size -1
    private final int num;

    /**
     * 构建
     *
     * @param row   起始行，从0开始
     * @param col   起始列，从0开始
     * @param num   合并的列数：正数 col + num, 负数 row.cells.size -1 + num，零 row.cells.size -1
     */
    public MergeColumnTableRenderPolicy(int row, int col, int num) {
        this.row = row;
        this.col = col;
        this.num = num;
    }

    @Override
    public void render(XWPFTable table, Object data) {
        int to;
        if (num == 0) {
            // 结尾列
            to = table.getRow(row).getTableCells().size() - 1;
        }else if (num > 0) {
            // 开始列 + num列
            to = col + num;
        }else{
            // 结尾列 - num列
            to = table.getRow(row).getTableCells().size() - 1 + num;
        }
        if (to > col) {
            // 合并
            TableTools.mergeCellsHorizonal(table, row, col, to);
        }
    }
}
